A storage server is a special-purpose processing system used to store and retrieve data on behalf of one or more client processing systems (“clients”). A storage server can be used for many different purposes, such as to provide multiple users with access to shared data or to backup mission critical data.
One example of a storage server is a file server. A file server operates on behalf of one or more clients to store and manage shared files in a set of mass storage devices, such as magnetic or optical storage based disks or tapes. The mass storage devices may be organized into one or more volumes of Redundant Array of Inexpensive Disks (RAID), sometimes known as “Redundant Array of Independent Disks.” Some storage servers provide clients with block-level access to stored data, instead of or in addition to file-level access.
A block is a logical unit of data stored on a storage device. Files, and other data, stored on the mass storage devices are typically stored in the form of one or more blocks. A file may include pointers referencing one or more blocks that store the data comprising the file.
To provide a version of data (e.g. files) stored in one or more mass storage devices at a particular point in time, storage systems may create persistent point-in-time images of data. A point-in-time image of data is a read-only view of data in a data set at a particular point in time. Objects may be created to provide access to or to replicate a point-in-time image. For example, a logical unit number (LUN) clone may be created to provide access to a subset of the contents in a volume of data. A volume clone may be created to provide access to the entire contents of the volume of data. These objects are dependent on the point-in-time image.
A point-in-time image may be used to restore a state of the stored data in the event of, for example, a catastrophic failure of the storage system or corruption of data. The ability to restore data from a point-in-time image provides administrators with a simple mechanism to revert the state of their data to a known previous state in time as captured by the point-in-time image.
Over time, a point-in-time image stored in a storage system may become obsolete. To free up storage space in the storage system, a user (e.g. an administrator) may want to delete the obsolete point-in-time image. However, before the point-in-time image is deleted, the point-in-time image's dependent relationships should be broken to prevent dependent objects from referencing a non-existent point-in-time image.
Identifying these relationships, and determining an order and manner in which to break them, can be complicated. For example, when a storage system is configured to automatically generate point-in-time images, the number of point-in-time images and the number and levels of dependencies can become extensive. This complexity makes it difficult for an administrator to manage the point-in-time images and, in particular, to identify which dependencies to break and in which order.
Therefore, what is needed is a method and system for more effectively managing point-in-time images in a storage system.